import { watch } from 'vue'
import { useForm } from '@/hooks/web/useForm'

// 基础编辑模板视图功能，第一个参数为当前行信息，第二个参数为额外参数，比如上传组件中的结果，内容为{key:value}，其中都是ref对象
/**
 * 调用write的基础方法
 * @param props 当前行信息
 * @param onSubmit 在提交前可以修改提交的表单数据，data中的数据就是表单中的数据
 * @param onCurrentRow 进入write时的钩子，可以用于修改表单初始化数据
 */
export const useBaseWriteView = (
  props: { currentRow: Nullable<any> },
  onSubmit?: (data: any) => void,
  onCurrentRow?: (currentRow: any) => void
) => {
  const { formRegister, formMethods } = useForm()
  const { setValues, getFormData, getElFormExpose, setSchema } = formMethods

  const submit = async () => {
    const elForm = await getElFormExpose()
    const valid = await elForm?.validate().catch((err) => {
      console.log(err)
    })
    if (valid) {
      const formData = await getFormData()
      onSubmit?.(formData)
      return formData
    }
  }

  const doWatch = () => {
    watch(
      () => props.currentRow,
      (currentRow) => {
        if (!currentRow) return
        setValues(currentRow)
        setSchema([])
        onCurrentRow?.(currentRow)
      },
      {
        deep: true,
        immediate: true
      }
    )
  }

  return {
    formRegister,
    submit,
    doWatch,
    getFormData
  }
}
